余烬缀记

JS 按位操作符的一些理解

起因是想写一个能读取音乐信息的音乐播放器,于是开始研究 ID3 等 JS 库以寻求解决方式,虽然了解的怎么别人的代码但是由于对计算机二进制方面的知识了解过少于是伴随着其他原因这个想法就冷冻了

每种按位操作符的行为

|符号

开始我还以为这个符号和‘||’是一样得,隐隐呼呼记得以前某代码里面写过当时感到奇怪但是并没有去了解(留下了一个我不一定找得到得坑);

这个符号和‘||’意思是一样得,但是计算是按二进制计算的,0 和 1 就是 1,0 和 0 就是 0,1 是二进制的 1,转成布尔就是 true

代码解释一下详细的规则:

let x = 2 | 3
/*
 *	将2和3转成二进制分别是:10和11,然后按照比特(其他名称:位元,位;解释:单一的二进制数字)进行比较
 *  这里将10和11按位比较,如果存在1就是1那么结果就是11(0 vs 1; 1 vs 1)
 *  1 0
 *  1 1
 */
console.log(x..toString(2)) // 11
// 换一个
let y = 5 | 24
console.log(5..toString(2)) // 二进制:101
console.log(24..toString(2)) // 二进制:11000
/*
 * 00101
 * 11000
 * 结果: 11101
 */
console.log(y.toString(2)) // 11101

&符号

转换规则和上面一样,这个和‘&&’意思也一样的相同 1 为 1,0 和 1 得 0,1 和 0 还是 0

let x = 2 & 3
/*
 *  1 0
 *  1 1
 *  1 0
 */
console.log(x.toString(2)) // 10
// 换一个
let y = 5 & 24
console.log(5..toString(2)) // 二进制:101
console.log(24..toString(2)) // 二进制:11000
/*
 * 00101
 * 11000
 * 结果: 00000
 */
console.log(y.toString(2)) // 00000

^符号

参考按位异或

当其中 x,y 不相同时返回 1

>>

从右向左移除一比特

具体表现等同于Math.log2,

这个有一个用法是判断值是否为 0 和 1

v >> 1 === 0

<<

追加 0 在末尾

let x = 2 << 1 // 2的二进制是10, 追加一个0就是100为4
let y = 3 << 1 // 3的二进制是11, 追加一个0就是110为6

可以快速得出 2 的 n 次方与被操作数字x的积